package primary.String;

import java.util.Locale;

/**
 * @Author Elephas
 * @Date 2022/1/9
 **/
public class IsPalindrome {

    /*
        解法一：暴力解法，从两侧向中间逼近，检查对应元素是否相等，时间O(n),空间o(n);
        首先要去除其中的非字母和数字元素
        本题中g同一个字母的大写形式和小写形式认为是同一个字母。
     */

    public boolean isPalindrome(String s){
        char[] chars = s.toLowerCase().toCharArray();
        int count = 0;
        // 去除其中的非字母和数字
        for (int i = 0; i < chars.length; i++) {
            boolean cond1 = chars[i] >= '0' && chars[i] <='9';
            boolean cond2 = chars[i] >= 'a' && chars[i] <='z';
            if(cond1 || cond2){
                chars[count] = chars[i];
                count++;
            }
        }
        // 从两侧向中间检查是否回文
        int left = 0, right = count-1;
        while(left < right){
            if(chars[left++] != chars[right--])
                return false;
        }

        return true;
    }
}
